﻿/*
 * zunit.h
 *
 *  Created on: 2015年4月3日
 *      Author: Fifi Lyu
 */

#ifndef INCLUDE_ZPSOE_ZALGORITHM_ZUNIT_H_
#define INCLUDE_ZPSOE_ZALGORITHM_ZUNIT_H_

#include "zpsoe/common.h"

namespace zpsoe {

namespace zalgorithm {

namespace zunit {

// 输入二进制词头枚举，输出类似 KiB、MiB、GiB、KB、MB、GB 等单位字符串
// 输入国际单位制词头枚举，输出类似 KiB、MiB、GiB、KB、MB、GB 等单位字符串
ZPSOE_SHARED_LIB_API string to_str(const unit_type_t u);

/*
----------字节的次方单位----------
十进制前缀(SI)标准：
名字  缩写 次方
kilobyte  KB  10的3次方
megabyte  MB  10的6次方
gigabyte  GB  10的9次方
terabyte  TB  10的12次方
petabyte  PB  10的15次方
exabyte   EB  10的18次方
zettabyte   ZB  10的21次方
yottabyte   YB  10的24次方
------------------------------
二进制前缀(IEC 60027-2)标准：
名字      缩写  次方
kibibyte  KiB   2的10次方
mebibyte  MiB   2的20次方
gibibyte  GiB   2的30次方
tebibyte  TiB   2的40次方
pebibyte  PiB   2的50次方
exbibyte  EiB   2的60次方
zebibyte  ZiB   2的70次方
yobibyte  YiB   2的80次方
*/
ZPSOE_SHARED_LIB_API byte_t to_byte(const unit_type_t u);

// 将 ssize_t 转换为字节
ZPSOE_SHARED_LIB_API byte_t to_byte(const unit_type_t u, const uint_t s);

// 将 byte_t 转换为指定进制单位值
ZPSOE_SHARED_LIB_API uint_t to_size(
        const unit_type_t u, const byte_t b, const uint32_t precision = 2);

} /* namespace zunit */

} /* namespace zalgorithm */

} /* namespace zpsoe */

#endif /* INCLUDE_ZPSOE_ZALGORITHM_ZUNIT_H_ */
